home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / gnu / gcctest / tests03.zoo / tbcopy.c < prev    next >
C/C++ Source or Header  |  1992-04-27  |  3KB  |  132 lines

  1. #include <stdio.h>
  2.  
  3. extern void bcopy(void *src, void *dst, unsigned long cnt);
  4.  
  5. #define LEN 40  /* keep this below 255 */
  6.  
  7. void
  8. shake (unsigned char *arry)
  9. {
  10.     int i;
  11.  
  12.     /* copy down - even aligned */
  13.     bcopy (&arry[2], &arry[0], LEN - 2);
  14.     printf("down - even-even\n");
  15.     for (i = 0; i < 16; i++)
  16.     printf("%3d ", arry[i]);
  17.     printf("\n");
  18.  
  19.     /* copy up - even aligned */
  20.     printf("up - even-even\n");
  21.     bcopy (&arry[0], &arry[4], LEN - 4);
  22.     for (i = 0; i < 16; i++)
  23.     printf("%3d ", arry[i]);
  24.     printf("\n");
  25.  
  26.     /* copy down - odd-even aligned */
  27.     printf("down - even-odd\n");
  28.     bcopy (&arry[8], &arry[1], LEN - 8);
  29.     for (i = 0; i < 16; i++)
  30.     printf("%3d ", arry[i]);
  31.     printf("\n");
  32.     
  33.     /* copy up - odd-even aligned */
  34.     printf("up - even-odd\n");
  35.     bcopy (&arry[0], &arry[1], LEN - 1);
  36.     for (i = 0; i < 16; i++)
  37.     printf("%3d ", arry[i]);
  38.     printf("\n");
  39.     
  40.     /* copy down - odd-odd aligned */
  41.     printf("down - odd-odd\n");
  42.     bcopy (&arry[7], &arry[1], LEN - 7);
  43.     for (i = 0; i < 16; i++)
  44.     printf("%3d ", arry[i]);
  45.     printf("\n");
  46.     
  47.     /* copy up - odd-odd aligned */
  48.     printf("up - odd-odd\n");
  49.     bcopy (&arry[1], &arry[3], LEN - 3);
  50.     for (i = 0; i < 16; i++)
  51.     printf("%3d ", arry[i]);
  52.     printf("\n");
  53. }
  54.  
  55.  
  56. int
  57. main(int argc, char **argv)
  58. {
  59.     unsigned char bigo[0x20000];
  60.  
  61.     unsigned char ahull[LEN + 4], *arry;
  62.     unsigned char bhull[LEN + 4], *brry;
  63.     long i;
  64.     int  k;
  65.  
  66.     for (i = 0; i < 0x20000; i++) {
  67.     bigo[i] = i & 0xff;
  68.     }
  69.     /* shift bigo four positions up leaving the last */
  70.     bcopy(&bigo[0], &bigo[4], (0x20000 - 5));
  71.  
  72.     for (i = 4 + 254 ; i < 0x20000 - 5; i += 0x100) {
  73.     if (bigo[i] != 254 || bigo[i + 1] != 255) {
  74.         fprintf(stderr, "discrepancy on position %ld - got %u %u\n",
  75.             i, bigo[i], bigo[i + 1]);
  76.     }
  77.     }
  78.     printf("the last one is %u\n", bigo[0x20000 - 1]);
  79.     
  80.  
  81.     ahull[0] = ahull[1] = ahull[LEN + 2] = ahull[LEN + 3] = 0xff;
  82.     bhull[0] = bhull[1] = bhull[LEN + 2] = bhull[LEN + 3] = 0xff;
  83.     arry = &ahull[2];
  84.     brry = &bhull[2];
  85.     
  86.     for (i = 0; i < LEN; i++) {
  87.     arry[i] = i & 0xff;
  88.     }
  89.  
  90.     /* test copying between disjoint regions */
  91.  
  92.     bcopy(&arry[0], &brry[0], LEN);
  93.     for (i = 0; i < 16; i++)
  94.     printf("%3d ", brry[i]);
  95.     printf("\n");
  96.  
  97.     bcopy(&arry[1], &brry[1], LEN - 1);
  98.     for (i = 0; i < 16; i++)
  99.     printf("%3d ", brry[i]);
  100.     printf("\n");
  101.  
  102.     bcopy(&arry[2], &brry[2], LEN - 2);
  103.     for (i = 0; i < 16; i++)
  104.     printf("%3d ", brry[i]);
  105.     printf("\n");
  106.  
  107.     bcopy(&arry[3], &brry[3], LEN - 3);
  108.     for (i = 0; i < 16; i++)
  109.     printf("%3d ", brry[i]);
  110.     printf("\n");
  111.  
  112.     for (k = 4; k < LEN; k++)
  113.     bcopy(&arry[k], &brry[k], LEN - k);
  114.     for (i = LEN-16 ; i < LEN; i++)
  115.     printf("%3d ", brry[i]);
  116.     printf("\n");
  117.     for (i = 0; i < 16; i++)
  118.     printf("%3d ", brry[i]);
  119.     printf("\n");
  120.  
  121.     printf("*** %3d %3d %3d %3d ***\n",
  122.        ahull[0], ahull[1], ahull[LEN + 2], ahull[LEN + 3]);
  123.  
  124.     /* and now with an overlap */
  125.  
  126.     shake(&arry[0]);
  127.  
  128.     printf("*** %3d %3d %3d %3d ***\n",
  129.        ahull[0], ahull[1], ahull[LEN + 2], ahull[LEN + 3]);
  130.     return 0;
  131. }
  132.